package controle;
import modelo.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.Timer;

public class Game {
	
	public Personagem principal;
	XML xml = new XML();
	Main mainGame;
	
	public Lugares lugares;
	public Objetos objetos;
	public Inimigos inimigos;
	String localAnterior;
	String TipoLocalAnterior;
	
	public Game(Main m) {
		mainGame = m;
	}
	
	public ArrayList<Lugar> listaLugaresProximos() {
		
		ArrayList<Lugar> proximos = new ArrayList<Lugar>();
		
		for(Lugar k : lugares.listaLugares) {
			if (k.nome.matches(principal.foco)) {
				for (String j : k.lugaresProximos) {
					for (Lugar l : lugares.listaLugares) {
						if (l.nome.matches(j)) {
							proximos.add(l);
						}
					}
				}
			}
		}
		
		return proximos;
	}
	
	public void Gameloop () {
		if (principal.tipoFoco.matches("lugar")) {
			for(Lugar k : lugares.listaLugares) {
				if (k.nome.matches(principal.foco)) {
					mainGame.cenario.alteraTexto(k.onfocus());
					mainGame.batalha.encontraBatalha(k.rate);
				}
			}
		}
		else if (principal.tipoFoco.matches("objeto")) {
			for(Objeto j : objetos.listaObjetos) {  
				if (j.nome.matches(principal.foco)) {
					mainGame.cenario.alteraTexto(j.onfocus());
				}
			}
		}
		else if (principal.tipoFoco.matches("inimigo")) {
			for(Inimigo l : inimigos.listaInimigos) {  
				if (l.nome.matches(principal.foco)) {
					mainGame.cenario.alteraTexto(l.onfocus());
				}
			}
		}
	} 
	
	
	
	public void criaPersonagem(String nome, String classe) {
		principal =  new Personagem(nome, classe);
		principal.foco = "Spaaaaace";
		principal.tipoFoco = "lugar";
	}
	
	public void saveGame() {
		
		String conteudo = xml.criaXML(principal);
 
		// o true significa q o arquivo será constante 
		FileWriter x;
		try {
			x = new FileWriter("D:\\Saves\\Save" + principal.nome + ".xml");
			//conteudo += "\n\r"; // criando nova linha e recuo no arquivo 
			x.write(conteudo); // armazena o texto no objeto x, que aponta para o arquivo 
			x.close(); // cria o arquivo 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
	}
		
	public void startGame() {
		inimigos = xml.leXMLInimigos();
		lugares = xml.leXMLLugares();
	}


	public void carregaXML(String save) {
		
		principal = xml.leXMLPersonagem(save);
	}
	
	public String getLocalAnterior() {
		return localAnterior;
	}
	
	public void setLocalAnterior(String x) {
		localAnterior = x;
	}
	
	public String getTipoLocalAnterior() {
		return TipoLocalAnterior;
	}
	
	public void setTipoLocalAnterior(String x) {
		TipoLocalAnterior = x;
	}
	
	/*private String savePassword() {
		//falta implementar a lista de itens e equips
		
		String s[] = principal.toString().split("\\");
		
		return principal.toString();
	}*/
}
